# -*- encoding: utf-8 -*-
import time
import datetime
import sys
from osv import fields, osv
from tools.translate import _
import pdb
import logging


class CanhCaoHocVu(osv.osv_memory):
   _name = 'ctsv.canhcaohocvu'
   _description = 'Danh sach canh cao hoc vu'
   _columns = {
        'student': fields.many2one('res.users', string='Sinh viên', domain=[('type', '=', 'student')], required = True),
        'mssv' : fields.char('MSSV', size = 64, required = True),
        'name' : fields.char('Họ tên', size = 64, required = True),
        'semester': fields.many2one('aas.academic.semester', string='Học kỳ'),
        'list_id': fields.many2one('ctsv.getcchv', string='Danh sách'),
        'reason': fields.selection((('credit', _('Không đủ số tín chỉ tích lũy tối thiểu')),
                                 ('diemrenluyen', _('Điểm rèn luyện dưới mức cho phép')),
                                 ('dtb', _('Điểm trung bình nhỏ hơn điểm trung bình tối thiểu')),
                                 ('dtb2', _('Điểm trung bình 2 học kỳ liên tiếp nhỏ hơn điểm trung bình tối thiểu cho 2 học kỳ liên tiếp')),), string='Lý do'),
        'department': fields.many2one('aas.department', string='Khoa'),
        'reason_text' : fields.char('', size = 128, required = False),
   }
   _defaults = {
    }
   
   
   def get_all_lines(self, cr, uid, id, context=False):
       result = []
       ids = self.search(cr, uid, [('list_id', '=', id)], context=context)
       if ids:
           stt = 0
           for i in ids:
               obj = self.browse(cr, uid, i, context=context)
               stt += 1
               mssv = obj.mssv
               hoten = obj.name
               if obj.reason == 'credit':
                   reason = u'Không đủ số tín chỉ tích lũy tối thiểu'
               if obj.reason == 'diemrenluyen':
                   reason = u'Điểm rèn luyện dưới mức cho phép'
               if obj.reason == 'dtb':
                   reason = u'Điểm trung bình nhỏ hơn điểm trung bình tối thiểu' 
               if obj.reason == 'dtb2':
                   reason = u'Điểm trung bình 2 học kỳ liên tiếp nhỏ hơn điểm trung bình tối thiểu cho 2 học kỳ liên tiếp' 
               khoa = obj.department.name
               logging.info('---- mssv, hoten : %s -- %s ', mssv, hoten)
               logging.info('---- reason: %s', reason)
               result.append([stt,
                              mssv,
                              hoten,
                              reason,
                              khoa,])
       return result

CanhCaoHocVu()


class CanhCaoHocVu_Operation(osv.osv_memory):
    
    def check_existing(self, cr, uid, semester_id, context):
        semester_obj = self.pool.get('aas.academic.semester')
        logging.info('----semester for checking canhcaohocvu existing---- : %s ', semester_id)
        if semester_id:
            if semester_id > 1:
                if semester_id % 3 == 1:
                    semester = semester_obj.browse(cr, uid, semester_id - 2, context=context)
                else:
                    semester = semester_obj.browse(cr, uid, semester_id - 1, context=context)
                semester_id_chk = semester and semester.id or False
                cs_obj = self.pool.get('aas.course.student')
                cs_ids = cs_obj.search(cr, uid, [('course_id.academic_semester.id', '=', semester_id_chk)], context=context)
                if not cs_ids: raise osv.except_osv(_('Thông báo!'), _("Chưa có dữ liệu điểm!"))
            existing = self.search(cr, uid, [('semester', '=', semester_id)], context=context)
            if existing: raise osv.except_osv(_('Thông báo!'), _('Đã tồn tại danh sách cảnh cáo học vụ cho học kì này!'))
        pass
    
    
    def create(self, cr, uid, vals, context=None):
        semester = vals.get('semester', False)
        self.check_existing(cr, uid, semester, context=context)
        return super(CanhCaoHocVu_Operation, self).create(cr, uid, vals, context=context)
    
    def write(self, cr, uid, ids, vals, context=None):
        logging.info('----vals for update---- : %s ', vals.keys())
        semester_id = vals.get('semester', False)
        semester_obj = self.pool.get('aas.academic.semester')
        logging.info('----semester for checking canhcaohocvu existing---- : %s ', semester_id)
        self.check_existing(cr, uid, semester_id, context=context)
#        if semester_id:
#            if semester_id > 1:
#                if semester_id % 3 == 1:
#                    semester = semester_obj.browse(cr, uid, semester_id - 2, context=context)
#                else:
#                    semester = semester_obj.browse(cr, uid, semester_id - 1, context=context)
#                semester_id_chk = semester and semester.id or False
#                cs_obj = self.pool.get('aas.course.student')
#                cs_ids = cs_obj.search(cr, uid, [('course_id.academic_semester.id', '=', semester_id_chk)], context=context)
#                if not cs_ids: raise osv.except_osv(_('Thông báo!'), _("Chưa có dữ liệu điểm!"))
        if vals.has_key('update') == False:
            vals['update'] = True
        logging.info('----vals ---- : %s ', vals)
        return super(CanhCaoHocVu_Operation, self).write(cr, uid, ids, vals, context=context)
    
    def unlink(self, cr, uid, ids, context=None):
        logging.info('----ids for deleting---- : %s ', ids)
        cchv_obj  = self.pool.get('ctsv.canhcaohocvu')
        for id in ids:
            deleted_ids = cchv_obj.search(cr, uid, [('list_id.id', '=', id),], context=context)
        cchv_obj.unlink(cr, uid, deleted_ids, context=context)
        res = super(CanhCaoHocVu_Operation, self).unlink(cr, uid, ids, context=context)
        return res
        
    def count_passed_credit(self, cr, uid, id):
        res = 0
        course_student_obj = self.pool.get('aas.course.student')
        course_student_ids = course_student_obj.search(cr, uid, [('course_id.state', 'in', ('closed',)), ('student_id', '=', id),], context=None)   
#        logging.info('----student id: %s', id) 
        for csId in course_student_ids:
            cs = course_student_obj.browse(cr, uid, csId)
#            logging.info('----Does pass: %s ---course state: %s ---total credit: %s', cs.does_pass, cs.course_id.state, cs.total_credit)
            if cs.does_pass == True:
                arg = [('subject_id', '=', cs.subject_id.id),
                                ('course_id.state', 'in', ('closed',)),
                                ('student_id', '=', id),
                                ('id','>',cs.id),]
                nextIds = course_student_obj.search(cr, uid, arg, context=None)
#                logging.info('----Next id: %s', nextIds)
                if len(nextIds) <= 0:
                    res += cs.total_credit
        return res
    
    def default_semester(self, cr, uid, context=False):
        semester_id = 0
        now = time.strftime('%m/%d/%Y')
        logging.info('------- now for semester default:  %s',now)
        week_obj = self.pool.get('aas.academic.week')
        ids = week_obj.search(cr, uid, [('date_end', '>=', now), ('date_start', '<=', now)], context=context)
        logging.info('----week ids : %s',ids)
        if ids:
            obj = week_obj.browse(cr, uid, ids[0], context=context)
            semester_id = obj.academic_semester.id or False
        return semester_id
        
    
    def get_canhcaohocvu_list(self, cr, uid, ids, field_name, field_value, arg, context=None):
#        logging.info('----getting cchv..........')
        allStdSql = '''
                    SELECT *
                    FROM res_users
                    WHERE student = 'TRUE'
                    '''
        cr.execute(allStdSql,())
        allStudents = cr.dictfetchall()
        res={}
        records = self.browse(cr, uid, ids)
#        logging.info('----records len : %s', len(records))
        user_obj = self.pool.get('res.users')
        canhcaohocvu = self.pool.get('ctsv.canhcaohocvu')
        semester_obj = self.pool.get('aas.academic.semester')
        sv_pt_obj = self.pool.get('ctsv.sinhvien.phongtrao')
        for r in records:
#            logging.info('----update : %s', r.update)
            if(r.update):
                cr.execute("DELETE FROM ctsv_canhcaohocvu where list_id = %s", (str(r.id)))
#                logging.info('----update id : %s', r.id)
#                logging.info('----semester : %s -----year: %s ', r.semester.id, r.semester.academic_year.name)
                ses_name = r.semester.name
                year_name = r.semester.academic_year.name
                semester_id = r.semester and r.semester.id or False
                year_id = 0
                semester_pre_id = 0
                year_pre_id = 0
                if semester_id == 1:
                    semester_id = 0
                if semester_id > 1:
                    if semester_id % 3 == 1:
                        semester = semester_obj.browse(cr, uid, semester_id - 2, context=context)
                    else:
                        semester = semester_obj.browse(cr, uid, semester_id - 1, context=context)
                    year_id = semester.academic_year and semester.academic_year.id or False
                    semester_id = semester and semester.id or False
                    if semester_id > 1:
                        if semester_id % 3 == 1:
                            semester_pre = semester_obj.browse(cr, uid, semester_id - 2, context=context)
                        else:
                            semester_pre = semester_obj.browse(cr, uid, semester_id - 1, context=context)
                        semester_pre_id = semester_pre.id or False
                        year_pre_id = semester_pre.academic_year.id or False
#                        logging.info('----semester pre: %s -----year pre: %s ', semester_pre_id, year_pre_id)
                    current_year = str(time.localtime(time.time())[0])[-2:]
#                    logging.info('----current year: %s', current_year)
                for std in allStudents:
                    reason = False
                    drl = sv_pt_obj.get_drl_result(cr, uid, std['id'], semester_id, context=context)
                    if drl < r.drl:
                        reason = 'diemrenluyen'
                    stdrs = user_obj.get_study_result(cr, uid, std['id'], year_id, semester_id, mode='full', context=context)
                    logging.info('-------GPA: %s', stdrs['gpa'])
                    if stdrs['details']:
                        if (stdrs['gpa'] < r.current_dtb) :
                            reason = 'dtb'
                        else:
                            if (stdrs['gpa'] < r.two_semesters_dtb) :
                                if (semester_pre_id):
                                    stdrs_pre = user_obj.get_study_result(cr, uid, std['id'], year_pre_id, semester_pre_id, mode='full', context=context)
#                                    logging.info('-------Pre GPA: %s', stdrs_pre['gpa'])
                                    if (stdrs_pre['gpa'] < r.two_semesters_dtb) :
                                        reason = 'dtb2'
                    passed_credit = self.count_passed_credit(cr,uid,std['id'])
#                    logging.info('----passed credit : %s', passed_credit)
                    level = int(year_name[2:4]) - int(str(std['code'])[0:2])
#                    logging.info('----level : %s', level)
                    permitted_credit = 0;
                    if level == 0:
                        permitted_credit = r.permitted_credit11
                        if ses_name == '2' or ses_name == '3':
                            permitted_credit = r.permitted_credit12
                    if level == 1:
                        permitted_credit = r.permitted_credit21
                        if ses_name == '2' or ses_name == '3':
                            permitted_credit = r.permitted_credit22
                    if level == 2:
                        permitted_credit = r.permitted_credit31
                        if ses_name == '2' or ses_name == '3':
                            permitted_credit = r.permitted_credit32
                    if level == 3:
                        permitted_credit = r.permitted_credit41
                        if ses_name == '2' or ses_name == '3':
                            permitted_credit = r.permitted_credit42
                    if level >= 4:
                        permitted_credit = r.permitted_credit42
#                    logging.info('----permitted credit : %s',permitted_credit)
                    if(permitted_credit > passed_credit):
                        reason = 'credit'
                    if (reason):    
                        vals = {
                                'student' : std['id'],
                                'mssv' : std['code'],
                                'name' : std['name'],
                                'semester' : r.semester.id,
                                'list_id' : r.id,
                                'reason' : reason,
                                'department' : std['dept_id'],
                        }
                        canhcaohocvu.create(cr, uid, vals, context=context)
                        
            cr.execute("SELECT * FROM ctsv_canhcaohocvu",())
            dscc = cr.dictfetchall()
            for cchv in dscc :
                if r.id == cchv['list_id']: 
                    res[r.id] = cchv['id'] 
#                    logging.info('----record id : %s', r.id)
            self.write(cr, uid, [r.id], {'update': False,}, context=None)       
        return res
    
    _name = 'ctsv.getcchv'
    _description = 'Dieu kien canh cao hoc vu'
    _columns = {
        'name' : fields.char('Tên ds', size = 64, required = True),
        'drl' : fields.integer('DRL'),
        'current_dtb' : fields.float('1 học kỳ', digits=(12,2)),
        'two_semesters_dtb' : fields.float('2 học kỳ liên tiếp', digits=(12,2)),
        'permitted_credit11' : fields.integer('Học kỳ 1 năm 1', required = True),
        'permitted_credit12' : fields.integer('Học kỳ 2 năm 1', required = True),
        'permitted_credit21' : fields.integer('Học kỳ 1 năm 2', required = True),
        'permitted_credit22' : fields.integer('Học kỳ 2 năm 2', required = True),
        'permitted_credit31' : fields.integer('Học kỳ 1 năm 3', required = True),
        'permitted_credit32' : fields.integer('Học kỳ 2 năm 3', required = True),
        'permitted_credit41' : fields.integer('Học kỳ 1 năm 4', required = True),
        'permitted_credit42' : fields.integer('Học kỳ 2 năm 4', required = True),
        'semester': fields.many2one('aas.academic.semester', string='Áp dụng cho học kỳ', required = True),
        'update': fields.boolean('', readonly=True),
        'students': fields.function(get_canhcaohocvu_list, type='one2many', obj='ctsv.canhcaohocvu', method=True, string='Details'),
    }
    _defaults = {
        'name': lambda *a: 'named',
        'drl': lambda *a: 50,
        'permitted_credit11': lambda *a: 0,
        'permitted_credit12': lambda *a: 0,
        'permitted_credit21': lambda *a: 30,
        'permitted_credit22': lambda *a: 45,
        'permitted_credit31': lambda *a: 60,
        'permitted_credit32': lambda *a: 75,
        'permitted_credit41': lambda *a: 90,
        'permitted_credit42': lambda *a: 105,
        'current_dtb': lambda *a: 3,
        'two_semesters_dtb': lambda *a: 4,
        'semester': default_semester,
        'update': lambda *a: True,
     }
    
    def default_get(self, cr, uid, fields, context=False):
        res = super(CanhCaoHocVu_Operation, self).default_get(cr, uid, fields, context=context)
#        now = time.strftime('%m/%d/%Y')
#        week_obj = self.pool.get('aas.academic.week')
#        ids = week_obj.search(cr, uid, [('date_end', '>', now), ('date_start', '<=', now)], context=context)
#        logging.info('----week ids : %s',ids)
#        if ids:
#            obj = week_obj.browse(cr, uid, ids[0], context=context)
#            semester_id = obj.academic_semester.id or False
#        res.update({'semester': semester_id})
        return res
    
CanhCaoHocVu_Operation()


class canhcaohocvu_list(osv.TransientModel):
    _name = 'ctsv.cchv.list'
    _columns = {
        'cchv_ids': fields.many2many('ctsv.canhcaohocvu', 'cchv_list_rel', 'ds_id', 'cchv_id', string='Danh sách cảnh cáo học vụ', readonly=True),
        'readonly': fields.boolean('', readonly=True),
    }
    _defaults = {  
        'readonly': lambda *a: True,
    }
    
    def default_get(self, cr, uid, fields, context=False):
        res = super(canhcaohocvu_list, self).default_get(cr, uid, fields, context=context)
        id = context.get('active_id', False)
        logging.info('---- ACTIVE ID:  %s',id)
        self.list_id = False
        if id:
            list_obj = self.pool.get('ctsv.canhcaohocvu')
            ids = list_obj.search(cr, uid, [('list_id', '=', id)], context=context)
            logging.info('------- ids rel:  %s',ids)
            res.update({'cchv_ids': ids})
            
            if ids:
                sql = '''
                    SELECT list_id
                    FROM ctsv_canhcaohocvu
                    WHERE id = %s
                '''
                cr.execute(sql, (ids[0],))
                if cr.rowcount > 0:
                    self.list_id = cr.fetchone()[0]
        return res
    
    def send_gxn_notification_email(self, cr, uid, id, context=None):
        if not self.list_id:
            raise osv.except_osv(_('Thông báo!'), _("Không thể gửi email!"))
        logging.info('------- list_id rel:  %s',self.list_id)
        cchv_obj = self.pool.get('ctsv.canhcaohocvu')
        ids = cchv_obj.search(cr, uid, [('list_id', '=', self.list_id)], context=context)
        if ids:
            for i in ids:
                obj = cchv_obj.browse(cr, uid, i, context=context)
                mssv = obj.mssv
                hoten = obj.name
                reason = ''
                if obj.reason == 'credit':
                    reason = u'Lý do: Không đủ số tín chỉ tích lũy tối thiểu'
                if obj.reason == 'diemrenluyen':
                    reason = u'Lý do: Điểm rèn luyện dưới mức cho phép'
                if obj.reason == 'dtb':
                    reason = u'Lý do: Điểm trung bình nhỏ hơn điểm trung bình tối thiểu' 
                if obj.reason == 'dtb2':
                    reason = u'Lý do: Điểm trung bình 2 học kỳ liên tiếp nhỏ hơn điểm trung bình tối thiểu cho 2 học kỳ liên tiếp' 
                cchv_obj.write(cr, uid, [i], {'reason_text': reason,}, context=context)
                print '****Inside function to send emails...'
                logging.info('****Inside function to send emails...')
                if not context: context = {}
                email_template_obj = self.pool.get('poweremail.templates')
                mailbox_obj = self.pool.get('poweremail.mailbox')
                name = 'Cảnh cáo học vụ'
                template_ids = email_template_obj.search(cr, uid, [('name', '=', name)])
                if not len(template_ids):
                    raise osv.except_osv(_('Lỗi!'), _('Không tìm thấy mẫu email "%s"!' % (name,)))
                emails_ids = email_template_obj.generate_mail(cr, uid, template_ids[0], [i], context=context)
                mailbox_obj.write(cr, uid, emails_ids, {}, context=context)
                print 'Đang gửi emails cho giấy xác nhận đã được ký...'
                mailbox_obj.send_all_mail(cr, uid, context=context)
                logging.info('Đang gửi emails...')
        return { 
                'view_type'     : 'form', 
                'view_mode'     : 'form', 
                'res_model'     : 'ctsv.cchv.send.emails', 
                'type'     : 'ir.actions.act_window', 
                'target'     : 'new', 
                } 

    
    def print_report(self, cr, uid, ids, context=False):
        datas = {}
        if not self.list_id:
            raise osv.except_osv(_('Thông báo!'), _("Không thể tải bản in!"))
        logging.info('------- list_id rel:  %s',self.list_id)
        datas['id'] = self.list_id
        datas['ids'] = [self.list_id]
        datas['model'] = 'ctsv.canhcaohocvu'
        logging.info('------- data rel:  %s',datas)
        return {
            'type': 'ir.actions.report.xml', 
            'report_name': 'ctsv_canhcaohocvu_report', 
            'datas': datas
        }
    
canhcaohocvu_list()
       
class BuocThoiHoc(osv.osv_memory):
   _name = 'ctsv.buocthoihoc'
   _columns = {
        'mssv' : fields.char('MSSV', size = 64, required = True),
        'name' : fields.char('Họ tên', size = 64, required = True),
        'semester': fields.many2one('aas.academic.semester', string='Học kỳ'),
        'list_id': fields.many2one('ctsv.getcchv', string='Danh sách'),
        'reason': fields.selection((('bohoc', _('Tự ý bỏ học 2 học kỳ chính')),
                                 ('hethan', _('Đã hết hạn tối đa của khóa học')),), string='Lý do'),
        'department': fields.many2one('aas.department', string='Khoa'),
   }
   _defaults = {
    }
   
   
   def get_all_lines(self, cr, uid, id, context=False):
       result = []
       ids = self.search(cr, uid, [('list_id', '=', id)], context=context)
       if ids:
           stt = 0
           for i in ids:
               obj = self.browse(cr, uid, i, context=context)
               stt += 1
               mssv = obj.mssv
               hoten = obj.name
               if obj.reason == 'bohoc':
                   reason = u'Tự ý bỏ học 2 học kỳ chính'
               if obj.reason == 'hethan':
                   reason = u'Đã hết hạn tối đa của khóa học'
               khoa = obj.department.name
               logging.info('---- mssv, hoten : %s -- %s ', mssv, hoten)
               logging.info('---- reason: %s', reason)
               result.append([stt,
                              mssv,
                              hoten,
                              reason,
                              khoa,])
       return result

BuocThoiHoc()       
       
       
class BuocThoiHoc_Operation(osv.osv_memory):
    
    def check_existing(self, cr, uid, semester_id, context):
        logging.info('----semester for checking buocthoihoc existing---- : %s ', semester_id)
        if semester_id:
            existing = self.search(cr, uid, [('semester', '=', semester_id)], context=context)
            if existing: raise osv.except_osv(_('Thông báo!'), _('Đã tồn tại danh sách buộc thôi học cho học kì này!'))
        pass
    
    def create(self, cr, uid, vals, context=None):
        semester = vals.get('semester', False)
        self.check_existing(cr, uid, semester, context=context)
        return super(BuocThoiHoc_Operation, self).create(cr, uid, vals, context=context)
    
    def write(self, cr, uid, ids, vals, context=None):
        logging.info('----vals for update---- : %s ', vals.keys())
        if vals.has_key('update') == False:
            vals['update'] = True
        return super(BuocThoiHoc_Operation, self).write(cr, uid, ids, vals, context=context)
    
    
    def get_buocthoihoc_list(self, cr, uid, ids, field_name, field_value, arg, context=None):
#        cr.execute("DELETE FROM ctsv_canhcaohocvu", ())
        logging.info('----getting buocthoihoc..........')
        allStdSql = '''
                    SELECT *
                    FROM res_users
                    WHERE student = 'TRUE'
                    '''
        cr.execute(allStdSql,())
        allStudents = cr.dictfetchall()
        res={}
        records = self.browse(cr, uid, idsTRUE)
        user_obj = self.pool.get('res.users')
        buocthoihoc = self.pool.get('ctsv.buocthoihoc')
        semester_obj = self.pool.get('aas.academic.semester')
        for r in records:
            logging.info('----update : %s', r.update)
            if(r.update):
                cr.execute("DELETE FROM ctsv_buocthoihoc where list_id = %s", (str(r.id)))
                logging.info('----semester : %s -----year: %s ', r.semester.id, r.semester.academic_year.name)
                ses_name = r.semester.name
                year_name = r.semester.academic_year.name
                semester_id = r.semester and r.semester.id or False
                semester = semester_obj.browse(cr, uid, semester_id - 1, context=context)
                year_id = semester.academic_year and semester.academic_year.id or False
                semester_id = semester and semester.id or False
                semester_pre = semester_obj.browse(cr, uid, semester_id - 1, context=context)
                semester_pre_id = semester_pre.id or False
                year_pre_id = semester_pre.academic_year.id or False
                current_year = str(time.localtime(time.time())[0])[-2:]
                logging.info('----semester pre: %s -----year pre: %s ', semester_pre_id, year_pre_id)
                logging.info('----current year: %s', current_year)
                for std in allStudents:
                    reason = False
                    stdrs = user_obj.get_study_result(cr, uid, std['id'], year_id, semester_id, mode='full', context=context)
                    logging.info('-------GPA: %s', stdrs['gpa'])
                    if (stdrs['gpa'] == 0) :
                        if (semester_pre_id):
                            stdrs_pre = user_obj.get_study_result(cr, uid, std['id'], year_pre_id, semester_pre_id, mode='full', context=context)
                            logging.info('-------Pre GPA: %s', stdrs_pre['gpa'])
                            if (stdrs_pre['gpa'] == 0) :
                                reason = 'bohoc'
                    if (reason):    
                        vals = {
                                'mssv' : std['code'],
                                'name' : std['name'],
                                'semester' : r.semester.id,
                                'list_id' : r.id,
                                'reason' : reason,
                                'department' : std['dept_id'],
                        }
                        buocthoihoc.create(cr, uid, vals, context=context)
                        
                cr.execute("SELECT * FROM ctsv_buocthoihoc",())
                dscc = cr.dictfetchall()
                for cchv in dscc :
                    if r.id == cchv['list_id']: 
                        res[r.id] = cchv['id'] 
                self.write(cr, uid, [r.id], {'update': False,}, context=None)       
        return res
    
    _name = 'ctsv.getthoihoc'
    _columns = {
        'name' : fields.char('Tên ds', size = 64, required = True),
        'bo_hoc' : fields.integer('Số học kỳ liên tiếp điểm trung bình bằng 0'),
#        'khmt_end_time' : fields.float('Khoa học máy tính', digits=(1,1)),
#        'httt_end_time' : fields.float('Hệ thống thông tin', digits=(1,1)),
#        'mmt_end_time' : fields.float('Mạng máy tính', digits=(1,1)),
#        'ktmt_end_time' : fields.float('Kĩ thuật máy tính', digits=(1,1)), 
#        'cnpm_end_time' : fields.float('Công nghệ phần mềm', digits=(1,1)),                       
        'semester': fields.many2one('aas.academic.semester', string='Áp dụng từ học kỳ', readonly=True),
        'update': fields.boolean('', readonly=True),
        'students': fields.function(get_buocthoihoc_list, type='one2many', obj='ctsv.buocthoihoc', method=True, string='Details'),
    }
    _defaults = {
        'name': lambda *a: 'named',
        'bo_hoc': lambda *a: 2,
#        'khmt_end_time': lambda *a: 6,
#        'httt_end_time': lambda *a: 6.5,
#        'mmt_end_time': lambda *a: 30,
#        'ktmt_end_time': lambda *a: 45,
#        'cnpm_end_time': lambda *a: 60,
        'update': lambda *a: True,
     }
    
    def default_get(self, cr, uid, fields, context=False):
        res = super(BuocThoiHoc_Operation, self).default_get(cr, uid, fields, context=context)
        now = time.strftime('%m/%d/%Y')
        week_obj = self.pool.get('aas.academic.week')
        ids = week_obj.search(cr, uid, [('date_end', '>', now), ('date_start', '<=', now)], context=context)
        logging.info('----week ids : %s',ids)
        if ids:
            obj = week_obj.browse(cr, uid, ids[0], context=context)
            semester_id = obj.academic_semester.id or False
        res.update({'semester': semester_id})
        return res
    
BuocThoiHoc_Operation()   

class ctsv_cchv_send_emails(osv.TransientModel):
    _name = 'ctsv.cchv.send.emails'
    _columns = {
        'name': fields.char('/', size=64),
    }
    _defaults = {
        'name': lambda *a: '/',
    }
ctsv_cchv_send_emails()


class canhcaohocvu_graph(osv.TransientModel):
    _name = 'ctsv.canhcaohocvu.graph'
    _columns = {
        'semester': fields.char('Học kỳ', size=64),
        'total_student': fields.integer('Tổng số sinh viên bị cảnh cáo học vụ'),
    }
    _defaults = {}
    def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
        sql = ''' DELETE FROM ctsv_canhcaohocvu_graph '''
        cr.execute(sql)
        
        get_cchv_obj = self.pool.get('ctsv.getcchv')
        cchv_obj = self.pool.get('ctsv.canhcaohocvu')
        data_to_create = []
        get_cchv_ids = get_cchv_obj.search(cr, uid, [], context=context)
        if get_cchv_ids:
            for i in get_cchv_ids:
                obj = get_cchv_obj.browse(cr, uid, i, context=context)
                cchv_ids = cchv_obj.search(cr, uid, [('list_id.id', '=', i)], context=context)
                if cchv_ids:
                    data_to_create.append({'semester': obj.semester.name + ' (' + obj.semester.academic_year.name + ')',
                                            'total_student': len(cchv_ids)})
        ids = []
        if data_to_create:
            for data in data_to_create:
                id = self.create(cr, uid, data, context=context)
                ids.append(id)
        return ids
canhcaohocvu_graph()

